#ifndef PAINTER_H
#define PAINTER_H
//主要用于实现坐标轴、刻度、网格以及函数图像的绘制

#include <QFrame>
#include <QPainter>
#include <QModelIndex>
#include "plan.h"
#include "list.h"

class Painter : public QFrame
{
    Q_OBJECT
    friend class Plan;
public:
    explicit Painter(QWidget *parent = nullptr);
    virtual void resizeEvent(QResizeEvent *event);
    virtual void paintEvent(QPaintEvent *event);

    //逻辑坐标转设备坐标
    int LxtoDx(double x) const;
    int LytoDy(double y) const;

    //设备坐标转逻辑坐标
    double DxtoLx(int x) const;
    double DytoLy(int y) const;

    //判断是否画xy轴和网格
    bool canDrawXy;
    bool canDrawGrid;
private:
    List* myList;//从函数列表中读取函数，一个一个地绘图
    double m_Xmin,m_Ymin,m_Xmax,m_Ymax;//函数数值范围（逻辑坐标范围），可以根据用户要求改
    int m_top,m_bottom,m_left,m_right;//设备范围（设备坐标范围），初始化之后就不会改了
    void drawFunc(QPainter& painter);//绘制函数
    void drawScale(QPainter& painter);//绘制刻度,刻度数值
    void drawAxis(QPainter& painter);//绘制坐标轴
    void drawGrid(QPainter& painter);//绘制网格
};


#endif // PAINTER_H
